/*
 * To change this template, choose Tools | Templates
 * and open the template in the editor.
 */

package com.mindbox.mueblesalpes.negocio.entity;

import java.io.Serializable;
import javax.persistence.Entity;
import javax.persistence.EnumType;
import javax.persistence.Enumerated;
import javax.persistence.Id;
import javax.persistence.NamedQuery;
import javax.persistence.Table;

/**
 * Clase que representa una Entidad Bancaria o Tarjeta de crédito.
 * @author jsanchez
 */
@Entity
@Table(name="entidad")
@NamedQuery(name="findEntidadByFormaPago",
            query="SELECT e FROM Entidad e where e.formaPago = :forma")
public class Entidad implements Serializable, Cloneable {
    @Id
    private String id;
    private String nombre;
    
    @Enumerated(EnumType.STRING)
    private FormaPago formaPago;

    /**
     * Contruye una entidad vacía
     */
    public Entidad() {
    }

    /**
     * Contruye una entidad con todos sus atributos.
     * @param id
     * @param nombre
     * @param formaPago
     */
    public Entidad(String id, String nombre, FormaPago formaPago) {
        this.id = id;
        this.nombre = nombre;
        this.formaPago = formaPago;
    }

    /**
     * Obtiene el Id.
     * @return String
     */
    public String getId() {
        return id;
    }

    /**
     * Coloca el Id.
     * @param id
     */
    public void setId(String id) {
        this.id = id;
    }

    /**
     * Obtiene el nombre
     * @return String
     */
    public String getNombre() {
        return nombre;
    }

    /**
     * Coloca el nombre
     * @param nombre
     */
    public void setNombre(String nombre) {
        this.nombre = nombre;
    }
    @Override
    public boolean equals(Object obj) {
        if(obj != null && obj instanceof Entidad && 
                this.getId() != null && 
                ((Entidad)obj).getId() != null )
            return this.getId().equals(((Entidad)obj).getId());
        return false;
    }

    @Override
    public Object clone() throws CloneNotSupportedException {
        Entidad e = new Entidad();
        e.setId(this.getId());
        e.setNombre(this.getNombre());
        e.setFormaPago(this.getFormaPago());
        return e;
    }

    @Override
    public int hashCode() {
        if(this.getId() == null)
            return 0;
        return this.getId().hashCode();
    }

    /**
     * Obtiene la forma de pago.
     * @return FormaPago
     */
    public FormaPago getFormaPago() {
        return formaPago;
    }

    /**
     * Coloca la forma de pago.
     * @param formaPago
     */
    public void setFormaPago(FormaPago formaPago) {
        this.formaPago = formaPago;
    }
}